home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 03 - 1987 / 03.09 Sep 87 / arrays source / Arrays.Pas next >
Encoding:
Pascal/Delphi Source File  |  1987-07-07  |  3.1 KB  |  99 lines  |  [TEXT/EDIT]

  1. {###############################################################################}
  2. {#                                           #}
  3. {#  File: Arrays.Pas                                    #}
  4. {#  Author: Darryl Lovato.                               #}
  5. {#  Description:                                   #}
  6. {#                                           #}
  7. {#    This module provides a set of routines to create & use large arrays    #}
  8. {#                                           #}
  9. {###############################################################################}
  10.  
  11. unit Arrays;
  12.  
  13. interface
  14.  
  15. uses MacIntf;
  16.  
  17. function  CreateNewArray(elemSize, upperBound : Longint) : Handle;
  18. procedure DisposeArray(ary : Handle);
  19. procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr);
  20. function  GetElement(ary : Handle; elemNum : Longint) : Ptr;
  21.  
  22. implementation
  23.  
  24. type
  25.    ArrayHdl = ^ArrayPtr;
  26.    ArrayPtr = ^ArrayRec;
  27.    ArrayRec = record
  28.        hiBound : integer;
  29.        cellSize : Longint;
  30.        dataStuff : integer;
  31.    end;
  32.  
  33. {###############################################################################}
  34. {#                                           #}
  35. {#function CreateNewArray(elemSize, lowerBound, upperBound : Longint) : Handle;#}
  36. {#                                           #}
  37. {###############################################################################}
  38.  
  39. function CreateNewArray(elemSize, upperBound : Longint) : Handle;
  40.   var
  41.     tempHdl : ArrayHdl;
  42.   begin
  43.     tempHdl := ArrayHdl(NewHandle(Ord4(SizeOf(ArrayRec)) - 2
  44.             + ((upperbound + 1) * elemSize)));
  45.     with tempHdl^^ do
  46.       begin
  47.         hiBound := upperBound;
  48.         cellSize := elemSize;
  49.       end;
  50.     CreateNewArray := Handle(tempHdl);
  51.   end;
  52.  
  53. {###############################################################################}
  54. {#                                           #}
  55. {#        procedure DisposeArray(ary : Handle);                   #}
  56. {#                                           #}
  57. {###############################################################################}
  58.  
  59. procedure DisposeArray(ary : Handle);
  60.   begin
  61.     DisposHandle(ary);
  62.   end;
  63.  
  64. {###############################################################################}
  65. {#                                           #}
  66. {#    procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr);  #}
  67. {#                                           #}
  68. {###############################################################################}
  69.  
  70. procedure SetElement(ary : Handle; elemNum : Longint; elemPtr : Ptr);
  71.   type
  72.     fakeary = packed array[1..10000] of signedbyte;
  73.     fakeptr = ^fakeary;
  74.   var
  75.     cellAddr : fakePtr;
  76.     i : integer;
  77.   begin
  78.     with ArrayHdl(ary)^^ do
  79.       if (elemNum > 0) and (elemNum < hibound) then
  80.         begin
  81.           cellAddr := fakePtr(Ord4(@dataStuff) + (elemNum * cellSize));
  82.           for i := 0 to cellSize - 1 do
  83.             cellAddr^[i] := fakePtr(elemPtr)^[i];
  84.         end;
  85.   end;
  86.  
  87. {###############################################################################}
  88. {#                                           #}
  89. {#    procedure GetElement(ary : Handle; elemNum : Longint) : Ptr;           #}
  90. {#                                           #}
  91. {###############################################################################}
  92.  
  93. function GetElement(ary : Handle; elemNum : Longint) : Ptr;
  94.   begin
  95.     with ArrayHdl(ary)^^ do
  96.       if (elemNum > 0) and (elemNum < hibound) then
  97.         GetElement := Pointer(Ord4(@dataStuff) + (elemNum * cellSize));
  98.   end;
  99. end.